package cn.ggsaas.base.util;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

import java.io.*;

/**
 * Base64 与 图片 互转插件
 *
 * @author liyuzhen
 */
public class ImageToBase64ToImage {

    /**
     * 图片转化成base64字符串
     * @return base64字符串
     */
    public static String imageToBase64(){
        //将图片文件转化为字节数组字符串，并对其进行Base64编码处理

        //待处理的图片
        String imgFile = "~/img/timg.png";
        InputStream in;
        byte[] data = null;
        //读取图片字节数组
        try{
            in = new FileInputStream(imgFile);
            data = new byte[in.available()];
            in.read(data);
            in.close();
        }catch (IOException e){
            e.printStackTrace();
        }
        //对字节数组Base64编码
        BASE64Encoder encoder = new BASE64Encoder();
        //返回Base64编码过的字节数组字符串
        return encoder.encode(data);
    }

    /**
     * 将base64字符串转化成图片
     * @param imgStr base64图片字符串
     * @return 图片
     */
    public static File base64ToImage(String imgStr){
        //对字节数组字符串进行Base64解码并生成图片

        //图像数据为空
        if (imgStr == null) {
            return null;
        }
        BASE64Decoder decoder = new BASE64Decoder();
        try{
            //Base64解码
            byte[] b = decoder.decodeBuffer(imgStr);
            for(int i=0;i<b.length;++i){
                //调整异常数据
                if(b[i]<0){
                    b[i]+=256;
                }
            }
            String s = IdUtil.randomUUID();
            return FileUtil.writeBytes(b,new File(s+".jpg"));

        }catch (Exception e){
            return null;
        }
    }
}